package cmd

import (
    "fmt"
    "os"

    `gitee.com/exi-red/maketools/util`
    "github.com/spf13/cobra"
)

// ROOTNAME 主命令名称
const ROOTNAME = "maketools"

// VERSION 版本号
const VERSION = "1.0.22"

// Params
// 参数
type Params struct {
    Name      string // 参数名称
    Shorthand string // 参数缩写
    Value     string // string 默认值
    IntValue  int    // int 默认值
    Usage     string // 用法
}

// 注册主命令
var rootCmd = &cobra.Command{
    Use: ROOTNAME,
    Long: util.CLIHeader(
        40,
        "用于简化 Makefile 命令的工具",
        fmt.Sprintf("%s Version: %s", ROOTNAME, VERSION),
    ),
    Run: func(cmd *cobra.Command, args []string) {},
}

// 帮助子命令
var helpCmd = &cobra.Command{
    Use:   "help",
    Short: "获取命令帮助信息",
    Long:  "获取关于任何命令的详细帮助信息，包括用法、参数和示例。",
    Run: func(cmd *cobra.Command, args []string) {
        _ = rootCmd.Help()
    },
}

// Execute
// 执行解析入口
func Execute() {

    // 重写帮助子命令
    rootCmd.SetHelpCommand(helpCmd)

    // 注册子命令
    rootCmd.AddCommand(airCmd, cpCmd, rdCmd, zipCmd)

    // 关闭 Completion 子命令
    rootCmd.CompletionOptions.DisableDefaultCmd = true

    // 设置命令排序规则为 NONE（禁用字母排序）
    cobra.EnableCommandSorting = false

    // 根命令自定义帮助参数信息
    rootCmd.PersistentFlags().BoolP("help", "h", false, "显示帮助信息")

    // 执行解析
    err := rootCmd.Execute()
    if err != nil {
        os.Exit(1)
    }
}

// StringP
// 注册字符串参数
func StringP(cmd *cobra.Command, params Params) {
    cmd.Flags().StringP(params.Name, params.Shorthand, params.Value, params.Usage)
}

// IntP
// 注册数字参数
func IntP(cmd *cobra.Command, params Params) {
    cmd.Flags().IntP(params.Name, params.Shorthand, params.IntValue, params.Usage)
}

// BoolP
// 注册布尔参数
func BoolP(cmd *cobra.Command, name, shorthand string, value bool, usage string) {
    cmd.Flags().BoolP(name, shorthand, value, usage)
}
